/**
 * Copyright(C) 2012 Luvina
 * TblUserDao.java, 25-05-2012 NguyenVietDung
 */
package net.luvina.manageuser.dao;

import java.util.List;

import net.luvina.manageuser.dto.UserDetailDto;
import net.luvina.manageuser.hibernate.TblUser;

/**
 * TblUserDao: Thao tác với database và file hibernate
 *
 * @author NguyenVietDung
 */
public interface TblUserDao extends GenericDao<TblUser, Integer> {
	/**
	 * getListUser: Lấy danh sách user [Description]
	 *
	 * @param offset
	 *            : Vị trí data cần lấy nào
	 * @param limit
	 *            : Số lượng lấy
	 * @param groupId
	 *            : Mã nhóm search
	 * @param fullName
	 *            : full_name search
	 * @param sortType
	 *            : ASC or DESC
	 * @param sortByFullName
	 *            : ASC or DESC
	 * @param sortByCodeLevel
	 *            : ASC or DESC
	 * @param sortByEndDate
	 *            : ASC or DESC
	 * @return List<UserDetailDto>: Một danh sách đối tượng UserDetailDto
	 */
	public List<UserDetailDto> getListUser(final int offset, final int limit, final int groupId, final String fullName, final String sortType,
			final String sortByFullName, final String sortByCodeLevel, final String sortByEndDate);

	/**
	 *
	 * getTotalRecords: Lấy tổng số user
	 *
	 * @param groupId
	 *            : Mã nhóm search
	 * @param fullName
	 *            : full_name_search
	 * @return
	 */
	public int getTotalRecords(final int groupId, final String fullName);

	/**
	 * getDetailUser: Lấy thông tin chi tiết của 1 user theo userId
	 *
	 *
	 * @param userId
	 *            : Mã của một user
	 * @return: Một đối tượng UserDetailDto
	 */
	public UserDetailDto getDetailUser(final Integer userId);

	/**
	 *
	 * getUserByEmail: Lấy thông tin của user theo Email
	 *
	 * @param userId
	 *            : Mã của một user
	 * @param email
	 *            : Email của user
	 * @return
	 */
	public TblUser getUserByEmail(final Integer userId, final String email);

	/**
	 *
	 * checkExistedLoginName: Kiểm tra loginName đã tồn tại trong bảng tbl_user
	 * chưa?
	 *
	 * @param userId
	 *            : Mã của một user
	 * @param loginName
	 *            : loginName của một user
	 * @return: Một đối tượng của TblUser
	 */
	public TblUser getUserByLoginName(final Integer userId, final String loginName);

}
